
    <!DOCTYPE html>
    <html lang="zh-CN">
    <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <title>线上消息队列故障的备选方案是什么？ - 学习卡片</title>
      <style>
        body { font-family: sans-serif; background-color: #f0f8ff; color: #333; display: flex; flex-direction: column; align-items: center; padding: 50px 20px; }
        .header h1 { font-size: 32px; }
        .grid-container { display: grid; grid-template-columns: repeat(3, 1fr); gap: 28px; width: 100%; max-width: 1200px; }
        .card-container { perspective: 1200px; cursor: pointer; height: 250px; }
        .card { width: 100%; height: 100%; position: relative; transform-style: preserve-3d; transition: transform 0.7s; border-radius: 16px; box-shadow: 0 4px 16px rgba(0,0,0,0.08); }
        .card-container.flipped .card { transform: rotateY(180deg); }
        .card-face { position: absolute; width: 100%; height: 100%; backface-visibility: hidden; display: flex; flex-direction: column; box-sizing: border-box; border-radius: 16px; background-color: #fff; padding: 24px; }
        .card-back { background-color: #f0fff4; transform: rotateY(180deg); justify-content: space-between; }
        .card-category { font-size: 14px; color: #0052d9; margin-bottom: 8px; font-weight: 500; }
        .card-question { font-size: 20px; font-weight: 500; flex-grow: 1; display: flex; align-items: center; justify-content: center; text-align: center; }
        .card-answer-wrapper { flex-grow: 1; overflow-y: auto; }
        .card-answer { font-size: 15px; line-height: 1.7; }
        .card-footer { font-size: 13px; color: #8a919f; border-top: 1px solid #f0f0f0; padding-top: 16px; margin-top: 16px; }
        .card-source { font-size: 13px; color: #8a919f; border-top: 1px solid #f0f0f0; padding-top: 12px; margin-top: 12px; }
      </style>
    </head>
    <body>
      <div class="header">
        <h1>线上消息队列故障的备选方案是什么？ - 学习卡片</h1>
      </div>
      <div class="grid-container">
        
    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">方案</div>
          <div class="card-question">当消息队列故障时，采用“消息持久化到数据库”方案的具体流程是怎样的？它有哪些优缺点？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">方案</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">流程是：应用程序在发送消息时，首先将消息保存到数据库，等消息队列恢复后，再从数据库中将消息读取并发送到队列中。优点是能确保消息不丢失且相对容易实现；缺点是会增加数据库的负担，且恢复消息时需要额外的处理逻辑。</div>
          </div>
          <div class="card-source">来源: 1. 消息持久化到数据库</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">机制</div>
          <div class="card-question">“双重消息队列”方案是如何提升系统高可用性的？其主要缺点是什么？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">机制</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">通过使用主备两个消息队列，在主队列出现故障时自动切换到备用队列，这个切换过程对业务几乎透明，从而提升了高可用性。其主要缺点是需要管理多个队列的同步和一致性，可能增加系统复杂性。</div>
          </div>
          <div class="card-source">来源: 2. 双重消息队列</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">方案对比</div>
          <div class="card-question">同样是应对短暂的消息队列故障，“使用本地缓存”和“重试机制”这两种方案的主要区别和局限性是什么？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">方案对比</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">“使用本地缓存”是将消息临时存到本地内存或磁盘，其局限性是缓存量有限，故障时间长或消息量大可能导致数据丢失或内存耗尽。而“重试机制”是定期尝试重新发送，其局限性是无法处理长时间的故障，并需注意重试频率以避免对系统产生负面影响。</div>
          </div>
          <div class="card-source">来源: 3. 使用本地缓存（内存或磁盘） 和 4. 重试机制</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">策略</div>
          <div class="card-question">什么是“系统降级”方案？它在应对消息队列故障时的主要作用和代价是什么？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">策略</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">“系统降级”是指在消息队列故障时，暂时降级系统的一部分功能，比如直接将消息处理为同步调用，或者暂时关闭非关键业务功能。其主要作用是能有效减少对消息队列的依赖，确保核心功能的正常运作。代价是可能会影响用户体验，导致部分业务功能暂时不可用。</div>
          </div>
          <div class="card-source">来源: 6. 系统降级</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">模式</div>
          <div class="card-question">“事件溯源（Event Sourcing）”模式如何应对消息队列故障？与传统方案相比，它的核心优势是什么？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">模式</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">在事件溯源模式中，所有事件都被持久化存储，消息队列仅是事件传播的一种方式。当队列故障时，事件仍然可以通过其他方式（如数据库、文件系统）进行重放或处理。其核心优势是能保证数据的一致性和可追溯性。</div>
          </div>
          <div class="card-source">来源: 7. 事件溯源（Event Sourcing）</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">架构</div>
          <div class="card-question">“多数据中心部署”方案如何实现消息队列的高可用性？实施该方案需要注意的主要挑战是什么？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">架构</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">该方案通过在多个数据中心部署消息队列来实现高可用性，当一个数据中心的消息队列出现故障时，可以切换到另一个数据中心的消息队列，从而提供地理上的冗余。实施该方案的主要挑战是需要解决多数据中心之间的数据同步问题，且部署和运维成本较高。</div>
          </div>
          <div class="card-source">来源: 8. 多数据中心部署</div>
        </div>
      </div>
    </div>

      </div>
    </body>
    </html>
